package com.swing.sky.framework.config;


import com.swing.sky.common.constant.Constants;
import com.swing.sky.framework.interceptor.BaseRepeatSubmitInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;

/**
 * springMVC配置
 * WebMvcConfigurer配置类其实是Spring内部的一种配置方式，采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制
 * <p>
 * 2.1 addInterceptors：拦截器
 * <p>
 * 2.2 addViewControllers：页面跳转
 * <p>
 * 2.3 addResourceHandlers：静态资源
 * <p>
 * 2.4 configureDefaultServletHandling：默认静态资源处理器
 * <p>
 * 2.5 configureViewResolvers：视图解析器
 * <p>
 * 2.6 configureContentNegotiation：配置内容裁决的一些参数
 * <p>
 * 2.7 addCorsMappings：跨域
 * <p>
 * 2.8 configureMessageConverters：信息转换器
 *
 * @author swing
 */
@Configuration
public class MVCConfig implements WebMvcConfigurer {
    @Resource
    private BaseRepeatSubmitInterceptor baseRepeatSubmitInterceptor;


    /**
     * 自定义静态资源路径
     *
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //addResoureHandler：指的是对外暴露的访问路径
        //addResourceLocations：指的是内部文件放置的目录
        //本地文件上传路径
        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + SkyConfig.getProfile() + "/");

        // swagger配置
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    /**
     * 添加自定义的拦截器
     * addInterceptor：需要一个实现HandlerInterceptor接口的拦截器实例
     * addPathPatterns：用于设置拦截器的过滤路径规则；addPathPatterns("/**")对所有请求都拦截
     * excludePathPatterns：用于设置不需要拦截的过滤规则
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(baseRepeatSubmitInterceptor).addPathPatterns("/**");
    }
}